<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Eigen-unsupported: Eigen::IDRS&lt; MatrixType_, Preconditioner_ &gt; Class Template Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
  $(document).ready(function() { init_search(); });
/* @license-end */
</script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
</script>
<script type="text/javascript" async="async" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="eigendoxy.css" rel="stylesheet" type="text/css">
<!--  -->
<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="Eigen_Silly_Professor_64x64.png"/></td>
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname"><a href="http://eigen.tuxfamily.org">Eigen-unsupported</a>
   &#160;<span id="projectnumber">3.4.90 (git rev 67eeba6e720c5745abc77ae6c92ce0a44aa7b7ae)</span>
   </div>
  </td>
   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.svg"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
          </span>
        </div>
</td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('classEigen_1_1IDRS.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="classEigen_1_1IDRS-members.html">List of all members</a> &#124;
<a href="#pub-methods">Public Member Functions</a>  </div>
  <div class="headertitle">
<div class="title">Eigen::IDRS&lt; MatrixType_, Preconditioner_ &gt; Class Template Reference<div class="ingroups"><a class="elRef" href="../group__Sparse__chapter.html">Sparse linear algebra</a> &raquo; <a class="elRef" href="../group__Sparse__Reference.html">Reference</a> &raquo; <a class="el" href="group__IterativeLinearSolvers__Module.html">Iterative Solvers module</a></div></div>  </div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><h3>template&lt;typename MatrixType_, typename Preconditioner_&gt;<br />
class Eigen::IDRS&lt; MatrixType_, Preconditioner_ &gt;</h3>

<p>The Induced Dimension Reduction method (IDR(s)) is a short-recurrences Krylov method for sparse square problems. </p>
<p>This class allows to solve for A.x = b sparse linear problems. The vectors x and b can be either dense or sparse. he Induced Dimension Reduction method, IDR(), is a robust and efficient short-recurrence Krylov subspace method for solving large nonsymmetric systems of linear equations.</p>
<p>For indefinite systems IDR(S) outperforms both BiCGStab and BiCGStab(L). Additionally, IDR(S) can handle matrices with complex eigenvalues more efficiently than BiCGStab.</p>
<p>Many problems that do not converge for <a class="elRef" href="../classEigen_1_1BiCGSTAB.html">BiCGSTAB</a> converge for IDR(s) (for larger values of s). And if both methods converge the convergence for IDR(s) is typically much faster for difficult systems (for example indefinite problems).</p>
<p>IDR(s) is a limited memory finite termination method. In exact arithmetic it converges in at most N+N/s iterations, with N the system size. It uses a fixed number of 4+3s vector. In comparison, <a class="elRef" href="../classEigen_1_1BiCGSTAB.html">BiCGSTAB</a> terminates in 2N iterations and uses 7 vectors. <a class="el" href="classEigen_1_1GMRES.html" title="A GMRES solver for sparse square problems.">GMRES</a> terminates in at most N iterations, and uses I+3 vectors, with I the number of iterations. Restarting <a class="el" href="classEigen_1_1GMRES.html" title="A GMRES solver for sparse square problems.">GMRES</a> limits the memory consumption, but destroys the finite termination property.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">MatrixType_</td><td>the type of the sparse matrix A, can be a dense or a sparse matrix. </td></tr>
    <tr><td class="paramname">Preconditioner_</td><td>the type of the preconditioner. Default is <a class="elRef" href="../classEigen_1_1DiagonalPreconditioner.html">DiagonalPreconditioner</a></td></tr>
  </table>
  </dd>
</dl>
<p>This class follows the <a class="elRef" href="../group__TopicSparseSystems.html#TutorialSparseSolverConcept">sparse solver concept </a>.</p>
<p>The maximal number of iterations and tolerance value can be controlled via the <a class="elRef" href="../classEigen_1_1IterativeSolverBase.html#af83de7a7d31d9d4bd1fef6222b07335b">setMaxIterations()</a> and <a class="elRef" href="../classEigen_1_1IterativeSolverBase.html#ac160a444af8998f93da9aa30e858470d">setTolerance()</a> methods. The defaults are the size of the problem for the maximal number of iterations and NumTraits&lt;Scalar&gt;::epsilon() for the tolerance.</p>
<p>The tolerance corresponds to the relative residual error: |Ax-b|/|b|</p>
<p><b>Performance:</b> when using sparse matrices, best performance is achied for a row-major sparse matrix format. Moreover, in this case multi-threading can be exploited if the user code is compiled with OpenMP enabled. See <a class="elRef" href="../TopicMultiThreading.html">Eigen and multi-threading</a> for details.</p>
<p>By default the iterations start with x=0 as an initial guess of the solution. One can control the start using the <a class="elRef" href="../classEigen_1_1IterativeSolverBase.html#adcc18d1ab283786dcbb5a3f63f4b4bd8">solveWithGuess()</a> method.</p>
<p>IDR(s) can also be used in a matrix-free context, see the following <a class="elRef" href="../group__MatrixfreeSolverExample.html">example </a>.</p>
<dl class="section see"><dt>See also</dt><dd>class <a class="elRef" href="../classEigen_1_1SimplicialCholesky.html">SimplicialCholesky</a>, <a class="elRef" href="../classEigen_1_1DiagonalPreconditioner.html">DiagonalPreconditioner</a>, <a class="elRef" href="../classEigen_1_1IdentityPreconditioner.html">IdentityPreconditioner</a> </dd></dl>
</div><div id="dynsection-0" onclick="return toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;">
  <img id="dynsection-0-trigger" src="closed.png" alt="+"/> Inheritance diagram for Eigen::IDRS&lt; MatrixType_, Preconditioner_ &gt;:</div>
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
<div class="center"><img src="classEigen_1_1IDRS__inherit__graph.png" border="0" usemap="#aEigen_1_1IDRS_3_01MatrixType___00_01Preconditioner___01_4_inherit__map" alt="Inheritance graph"/></div>
<map name="aEigen_1_1IDRS_3_01MatrixType___00_01Preconditioner___01_4_inherit__map" id="aEigen_1_1IDRS_3_01MatrixType___00_01Preconditioner___01_4_inherit__map">
<area shape="rect" title="The Induced Dimension Reduction method (IDR(s)) is a short&#45;recurrences Krylov method for sparse squar..." alt="" coords="55,520,227,715"/>
<area shape="rect" target="_parent" href="../classEigen_1_1IterativeSolverBase.html" title=" " alt="" coords="5,175,277,472"/>
<area shape="rect" target="_parent" href="../classEigen_1_1SparseSolverBase.html" title=" " alt="" coords="56,5,227,127"/>
</map>
</div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:ab75c5ed081568173f7c32b18c1e7c013"><td class="memTemplParams" colspan="2">template&lt;typename Rhs , typename Dest &gt; </td></tr>
<tr class="memitem:ab75c5ed081568173f7c32b18c1e7c013"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classEigen_1_1IDRS.html#ab75c5ed081568173f7c32b18c1e7c013">_solve_vector_with_guess_impl</a> (const Rhs &amp;b, Dest &amp;x) const</td></tr>
<tr class="separator:ab75c5ed081568173f7c32b18c1e7c013"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a029d9925395d811e62939d5aacc3dbc3"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEigen_1_1IDRS.html#a029d9925395d811e62939d5aacc3dbc3">IDRS</a> ()</td></tr>
<tr class="separator:a029d9925395d811e62939d5aacc3dbc3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3407644df005d4a74ce7e8ca9f03c320"><td class="memTemplParams" colspan="2">template&lt;typename MatrixDerived &gt; </td></tr>
<tr class="memitem:a3407644df005d4a74ce7e8ca9f03c320"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classEigen_1_1IDRS.html#a3407644df005d4a74ce7e8ca9f03c320">IDRS</a> (const <a class="elRef" href="../structEigen_1_1EigenBase.html">EigenBase</a>&lt; MatrixDerived &gt; &amp;A)</td></tr>
<tr class="separator:a3407644df005d4a74ce7e8ca9f03c320"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afb154a59c37ef4411391cb3b19aed4c9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEigen_1_1IDRS.html#afb154a59c37ef4411391cb3b19aed4c9">setAngle</a> (RealScalar angle)</td></tr>
<tr class="separator:afb154a59c37ef4411391cb3b19aed4c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a002e59270919dcb1ad6f70de3e900dcf"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEigen_1_1IDRS.html#a002e59270919dcb1ad6f70de3e900dcf">setResidualUpdate</a> (bool update)</td></tr>
<tr class="separator:a002e59270919dcb1ad6f70de3e900dcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeb11b800a0216ebf60560ec7f7e0e76a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEigen_1_1IDRS.html#aeb11b800a0216ebf60560ec7f7e0e76a">setS</a> (<a class="elRef" href="../namespaceEigen.html#a62e77e0933482dafde8fe197d9a2cfde">Index</a> S)</td></tr>
<tr class="separator:aeb11b800a0216ebf60560ec7f7e0e76a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad6f2fc19379d881e15d8c63f6ca8951a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classEigen_1_1IDRS.html#ad6f2fc19379d881e15d8c63f6ca8951a">setSmoothing</a> (bool smoothing)</td></tr>
<tr class="separator:ad6f2fc19379d881e15d8c63f6ca8951a"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a029d9925395d811e62939d5aacc3dbc3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a029d9925395d811e62939d5aacc3dbc3">&#9670;&nbsp;</a></span>IDRS() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename MatrixType_ , typename Preconditioner_ &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classEigen_1_1IDRS.html">Eigen::IDRS</a>&lt; MatrixType_, Preconditioner_ &gt;::<a class="el" href="classEigen_1_1IDRS.html">IDRS</a> </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Default constructor. </p>

</div>
</div>
<a id="a3407644df005d4a74ce7e8ca9f03c320"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3407644df005d4a74ce7e8ca9f03c320">&#9670;&nbsp;</a></span>IDRS() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename MatrixType_ , typename Preconditioner_ &gt; </div>
<div class="memtemplate">
template&lt;typename MatrixDerived &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classEigen_1_1IDRS.html">Eigen::IDRS</a>&lt; MatrixType_, Preconditioner_ &gt;::<a class="el" href="classEigen_1_1IDRS.html">IDRS</a> </td>
          <td>(</td>
          <td class="paramtype">const <a class="elRef" href="../structEigen_1_1EigenBase.html">EigenBase</a>&lt; MatrixDerived &gt; &amp;&#160;</td>
          <td class="paramname"><em>A</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">explicit</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Initialize the solver with matrix <em>A</em> for further <code>Ax=b</code> solving.</p>
<p>This constructor is a shortcut for the default constructor followed by a call to <a class="elRef" href="../classEigen_1_1IterativeSolverBase.html#a7dfa55c55e82d697bde227696a630914">compute()</a>.</p>
<dl class="section warning"><dt>Warning</dt><dd>this class stores a reference to the matrix A as well as some precomputed values that depend on it. Therefore, if <em>A</em> is changed this class becomes invalid. Call <a class="elRef" href="../classEigen_1_1IterativeSolverBase.html#a7dfa55c55e82d697bde227696a630914">compute()</a> to update it with the new matrix A, or modify a copy of A. </dd></dl>

</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="ab75c5ed081568173f7c32b18c1e7c013"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab75c5ed081568173f7c32b18c1e7c013">&#9670;&nbsp;</a></span>_solve_vector_with_guess_impl()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename MatrixType_ , typename Preconditioner_ &gt; </div>
<div class="memtemplate">
template&lt;typename Rhs , typename Dest &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classEigen_1_1IDRS.html">Eigen::IDRS</a>&lt; MatrixType_, Preconditioner_ &gt;::_solve_vector_with_guess_impl </td>
          <td>(</td>
          <td class="paramtype">const Rhs &amp;&#160;</td>
          <td class="paramname"><em>b</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Dest &amp;&#160;</td>
          <td class="paramname"><em>x</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Loops over the number of columns of b and does the following:</p><ol type="1">
<li>sets the tolerance and maxIterations</li>
<li>Calls the function that has the core solver routine </li>
</ol>

</div>
</div>
<a id="afb154a59c37ef4411391cb3b19aed4c9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afb154a59c37ef4411391cb3b19aed4c9">&#9670;&nbsp;</a></span>setAngle()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename MatrixType_ , typename Preconditioner_ &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classEigen_1_1IDRS.html">Eigen::IDRS</a>&lt; MatrixType_, Preconditioner_ &gt;::setAngle </td>
          <td>(</td>
          <td class="paramtype">RealScalar&#160;</td>
          <td class="paramname"><em>angle</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>The angle must be a real scalar. In IDR(s), a value for the iteration parameter omega must be chosen in every s+1th step. The most natural choice is to select a value to minimize the norm of the next residual. This corresponds to the parameter omega = 0. In practice, this may lead to values of omega that are so small that the other iteration parameters cannot be computed with sufficient accuracy. In such cases it is better to increase the value of omega sufficiently such that a compromise is reached between accurate computations and reduction of the residual norm. The parameter angle =0.7 (”maintaining the convergence strategy”) results in such a compromise. </p>

</div>
</div>
<a id="a002e59270919dcb1ad6f70de3e900dcf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a002e59270919dcb1ad6f70de3e900dcf">&#9670;&nbsp;</a></span>setResidualUpdate()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename MatrixType_ , typename Preconditioner_ &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classEigen_1_1IDRS.html">Eigen::IDRS</a>&lt; MatrixType_, Preconditioner_ &gt;::setResidualUpdate </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>update</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>The parameter replace is a logical that determines whether a residual replacement strategy is employed to increase the accuracy of the solution. </p>

</div>
</div>
<a id="aeb11b800a0216ebf60560ec7f7e0e76a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aeb11b800a0216ebf60560ec7f7e0e76a">&#9670;&nbsp;</a></span>setS()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename MatrixType_ , typename Preconditioner_ &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classEigen_1_1IDRS.html">Eigen::IDRS</a>&lt; MatrixType_, Preconditioner_ &gt;::setS </td>
          <td>(</td>
          <td class="paramtype"><a class="elRef" href="../namespaceEigen.html#a62e77e0933482dafde8fe197d9a2cfde">Index</a>&#160;</td>
          <td class="paramname"><em>S</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Sets the parameter S, indicating the dimension of the shadow space. Default is 4 </p>

</div>
</div>
<a id="ad6f2fc19379d881e15d8c63f6ca8951a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad6f2fc19379d881e15d8c63f6ca8951a">&#9670;&nbsp;</a></span>setSmoothing()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename MatrixType_ , typename Preconditioner_ &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classEigen_1_1IDRS.html">Eigen::IDRS</a>&lt; MatrixType_, Preconditioner_ &gt;::setSmoothing </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>smoothing</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Switches off and on smoothing. Residual smoothing results in monotonically decreasing residual norms at the expense of two extra vectors of storage and a few extra vector operations. Although monotonic decrease of the residual norms is a desirable property, the rate of convergence of the unsmoothed process and the smoothed process is basically the same. Default is off </p>

</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="IDRS_8h_source.html">IDRS.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="namespaceEigen.html">Eigen</a></li><li class="navelem"><a class="el" href="classEigen_1_1IDRS.html">IDRS</a></li>
    <li class="footer">Generated on Thu Apr 21 2022 13:08:00 for Eigen-unsupported by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.9.1 </li>
  </ul>
</div>
</body>
</html>
